import Vue from 'vue';
import App from './App';
import uniIcons from '@/components/uni-icons/uni-icons.vue';
Vue.config.productionTip = false;
App.mpType = 'app';
import config from './utils/config.js';
import http from './utils/request.js';
import { reportAddress, sendRobotMsg, getCardOptions, getRobotMsg, addCustompartslog, getLocalInfo } from './utils/global_fucs.js';
Vue.prototype.http = http; // 挂载this.http
import store from './store';
Vue.prototype.$store = store;



// #ifdef H5  
const Sentry = {}
// #endif
// #ifdef MP-WEIXIN
import * as Sentry from 'sentry-mina';

// 只在生产环境下初始化Sentry
if (process.env.NODE_ENV === 'production') {
	Sentry.init({
		debug: false, // 调试模式
		environment: process.env.VUE_APP_MODEL || process.env.NODE_ENV, // 可以调整为一个变量
		release: 'sida-repair-fe@0.0.2', // 确保此版本号与上传 Source Map 时一致
		dsn: 'https://e6e06821431c91e013e4783b577fcd7e@sentry.sida-tech.com/4',
		tracesSampleRate: 1.0,
	});
	Sentry.configureScope(scope => {
		// #ifdef MP-WEIXIN 
		scope.setTag('Platform', 'WEIXIN');
		// #endif
		// #ifdef MP-H5 
		scope.setTag('Platform', 'H5');
		// #endif
	});
}
Vue.prototype.$Sentry = Sentry;
// #endif
import {
	nextRouter,
	hidePhone
} from './utils/tools.js';
import { setWatermarkJson } from './utils/watermarkTool.js';
Vue.prototype.nextRouter = nextRouter; // 路由跳转方法封装
Vue.prototype.hidePhone = hidePhone; // 隐藏手机号码
Vue.prototype.setWatermarkJson = setWatermarkJson; // 设置水印数据
Vue.prototype.$config = config;
Vue.prototype.reportAddress = function (data) {
	try {
		reportAddress(data);
	} catch (error) {
		console.log('位置上报失败', error);
	}
};
Vue.prototype.sendRobotMsg = sendRobotMsg;
Vue.prototype.getCardOptions = getCardOptions;
Vue.prototype.addCustompartslog = addCustompartslog;
Vue.prototype.getLocalInfo = getLocalInfo; 
Vue.prototype.getRobotMsg = getRobotMsg;


import uniNumberBox from '@/components/uni-number-box/uni-number-box.vue';
Vue.component('uni-number-box', uniNumberBox);
Vue.component('uniIcons', uniIcons);

import groupTree from '@/components/member-tree/group-tree.vue';
Vue.component('groupTree', groupTree);

Vue.prototype.findRoute = function (key) { // 查找路由别名十分有权限
	if (store.state.user.routeCodes && store.state.user.routeCodes.length) {
		return store.state.user.routeCodes.indexOf(key) == -1 ? false : true;
	} else {
		return false;
	}
};

Vue.prototype.imgHeader = function (url) { // 拼接图片 路径
	// console.log('url,',url)
	if (!url || url == '') {
		return '';
	}
	if (url.indexOf('http') != -1) {
		return url;
	}
	return config.imgHeader + '' + url;
};
/**
 * OSS链接的图片处理函数，用于对OSS图片链接进行处理。
 *
 * @param {string} imageUrl 图片Url。
 * @param {Object} processParams 处理参数例子：{resize: 'w_50,h_50'}。
 * @returns {string} 返回图片的URL。
 */
// 详情参考：https://help.aliyun.com/zh/oss/user-guide/overview-17?spm=a2c4g.11186623.0.0.612f680cbmzE5N#section-tx1-qtj-ar8
Vue.prototype.generateOssImageUrl = (imageUrl, processParams) => {
	// 检查 imageUrl 是否有效
	if (!imageUrl) {
		throw new Error('imageUrl is required');
	}
	if (imageUrl.indexOf('aliyuncs.com') === -1) {
		return imageUrl;
	}
	// 初始化处理字符串
	let processStr = 'x-oss-process=image';

	// 根据 processParams 生成处理字符串
	for (const key in processParams) {
		if (Object.hasOwn(processParams, key)) {
			const value = processParams[key];
			if (value !== undefined && value !== null && value !== '') {
				processStr += `/${key},${encodeURIComponent(value)}`;
			}
		}
	}

	// 如果有处理参数，则在 URL 后添加处理字符串
	if (processStr) {
		// 确保 URL 中有问号分隔符
		if (!imageUrl.includes('?')) {
			imageUrl += '?';
		} else if (!imageUrl.endsWith('&')) {
			imageUrl += '&';
		}
		imageUrl += processStr;
	}
	return imageUrl;
};
/**
 * OSS链接的压缩处理函数，用于对OSS链接进行压缩处理，以减少网络传输开销。
 *
 * @param {string} imageUrl 图片Url。
 * @param {Number} quality 质量百分比默认为80。
 * @returns {string} 返回图片的URL。
 */
Vue.prototype.compressOssImageUrl = (imageUrl, quality = 80) => {
	return Vue.prototype.generateOssImageUrl(imageUrl, {
		quality: 'q_' + quality
	});
};
Vue.prototype.toLogin = function (url) {
	uni.showModal({
		title: '提示',
		content: `您还未登录${this.$config.appName}，是否前往登录`,
		success(res) {
			if (res.confirm) {
				if (url) {
					getApp().globalData.reUrl = url;
				}
				uni.navigateTo({
					url: '/pages/login/index'
				});
			}
		}
	});
};

// 重写previewMedia（图片视频预览组件

// #ifdef H5 
// H5环境 载入preview-media指令组件
import '@/components/preview-media/index.js';
// #endif

import offlineBanner from '@/components/offline-banner/offline-banner.vue';
Vue.component('offlineBanner', offlineBanner);
import previewMedia from '@/components/preview-media/preview-media.vue';
Vue.component('previewMedia', previewMedia);
Vue.prototype.$previewMedia = function (options) {
	if (this.$refs.previewMedia) {
		this.$refs.previewMedia.init(options);
		return;
	}
	if (this.$root && this.$root.$refs.previewMedia) {
		this.$root.$refs.previewMedia.init(options);
	}
};

// #ifdef H5
if (window._uuid === undefined) {
	setTimeout(() => {
		const app = new Vue({
			store,
			...App
		});
		app.$mount();
	}, 500);
}
// #endif

// #ifndef H5 
const app = new Vue({
	store,
	...App
});
app.$mount();
// #endif

export { Sentry };